package com.ruoyi.comm.crud.service;

import java.util.List;

import com.ruoyi.comm.crud.bean.dto.CheckDataDTO;
import com.ruoyi.common.core.page.PageQO;

/**
 * 案件类型信息 数据层
 * 
 * @author ruoyi
 */
public interface IBaseQService<T, Q> {
//public interface IBaseService<T, V> {

    /**
     * 查询案件类型数据集合
     * 
     * @param post 案件类型信息
     * @return 案件类型数据集合
     */
    public List<T> selectList(Q q);

    public List<T> query(Q q, PageQO page);
    
    public <A> List<A> query(Q q, Class<A> clz, PageQO page);
    
    //public List<V> queryVO(Q q, PageQO page);

    /**
     * 查询所有案件类型
     * 
     * @return 案件类型列表
     */
    public List<T> selectAll();

    /**
     * 通过案件类型ID查询案件类型信息
     * 
     * @param postId 案件类型ID
     * @return 角色对象信息
     */
    public T selectById(Long id);

    public T selectById(String id);

    public T selectById(Number id);
    
    public T selectByCode(String code);
    
    public <A> A selectByCode(String code, Class<A> clz);

    public List<T> selectListById(Number id);
    
    public <A> List<A> selectListById(Number id, Class<A> clz);

    /**
     * 批量删除案件类型信息
     * 
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    public int deleteByIds(Long[] ids);

    public int deleteByIds(String ids);

    /**
     * 删除案件类型信息
     * 
     * @param id 需要删除的数据ID
     * @return 结果
     */
    public int deleteById(Long id);

    public int deleteById(Number id);

    public int deleteById(String id);

    /**
     * 删除案件类型信息
     * 
     * @param u 案件类型信息
     * @return 结果
     */
    public int delete(T u);

    /**
     * 修改案件类型信息
     * 
     * @param u 案件类型信息
     * @return 结果
     */
    public int update(T u);

    public int check(T u);
//    
//    public int check(List<T> list);
    public int checkByIds(CheckDataDTO u);
    
    public <A> int updateA(A a);

    public <A> int checkA(A a);

    /**
     * 新增案件类型信息
     * 
     * @param post 案件类型信息
     * @return 结果
     */
    public int insert(T u);
    
    public <A> int insertA(A a);
    
    public int insert(List<T> ls);

    //public <K> int insert(K k, );
    
    //public <A> int insert(A a, Class<A> clz);
    
    public <A> int insertA(List<A> ls);
    
    public int replace(T u);

    public <A> int replaceA(A a);
    
    public int replace(List<T> ls);
    
    public <A> int replaceA(List<A> ls);

    /**
     * 校验案件类型名称
     * 
     * @param name 案件类型名称
     * @return 结果
     */
    //public T checkNameUnique(String name);

//    public Boolean checkNameUnique(String name);
//
//    public Long checkIdNameUnique(T t);
//
//    public Boolean existsIdNameUnique(T t);
    
    public Long getIdByName(T t);
    
    public Boolean checkNameUnique(T t);

    /**
     * 获取对应 entity 的 BaseMapper
     *
     * @return BaseMapper
     */
    //IBaseMapper<T> getBaseMapper();

    /**
     * 获取 entity 的 class
     *
     * @return {@link Class<T>}
     */
    //Class<T> getEntityClass();

}
